package pe.seleccion;


import pe.algenetico.MiRandom;
import pe.cromosoma.Cromosoma;
import pe.cromosoma.FactoriaCromosoma;

public class SeleccionTorneoProbabilista implements Seleccion{
	private double pTP = 0.3;
	
	public Cromosoma[] seleccion(int tam_pob, int tam_elite, Cromosoma[] pob, MiRandom ran, int funcion, int param){
		Cromosoma[] nuevaPob = new Cromosoma[tam_pob-tam_elite];
		for (int i = 0; i<tam_pob-tam_elite;i++){
			Cromosoma mejor = pob[ran.r.nextInt(tam_pob-tam_elite)];
			for(int j = 0; j<param;j++){
				Cromosoma otro = pob[ran.r.nextInt(tam_pob-tam_elite)];
				if(ran.r.nextDouble()>pTP){
					if (mejor.getAptitud()>otro.getAptitud()) mejor = otro;}
				else{
					if (mejor.getAptitud()<otro.getAptitud()) mejor = otro;}
			}
			nuevaPob[i]= FactoriaCromosoma.getCromosoma(funcion, mejor);
		}
		return nuevaPob;
	}
}
